home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2002 #11
/
Amiga Plus CD - 2002 - No. 11.iso
/
Tools
/
Development
/
PowerD
/
numconv
/
numconv.e
< prev
next >
Wrap
Text File
|
2002-10-28
|
8KB
|
295 lines
/* E Source generated by SRCGEN v0.4 */
OPT OSVERSION=37,REG=5
MODULE 'gadtools',
'libraries/gadtools',
'intuition/intuition',
'intuition/screens',
'intuition/gadgetclass',
'intuition/iobsolete',
'utility/tagitem',
'devices/inputevent',
'graphics/text',
'tools/detatch'
ENUM ERROR_NONE,
ERROR_CONTEXT,
ERROR_GADGET,
ERROR_WB,
ERROR_VISUAL,
ERROR_GT,
ERROR_WINDOW,
ERROR_MENUS
ENUM G_SRC,G_DST,G_STR,G_TXT,G_CB
ENUM DECI,HEX,BIN,ASCII,REAL,OCTAL
DEF infos:PTR TO gadget,
wnd:PTR TO window,
glist,
scr:PTR TO screen,
visual=NIL,
tattr:PTR TO textattr,
id
DEF gsrc,gdst,gs,gt,gcb
DEF src,dst,str:PTR TO CHAR,txt[36]:STRING,num,error=FALSE
PROC setupscreen()
IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN RETURN ERROR_GT
IF (scr:=LockPubScreen('Workbench'))=NIL THEN RETURN ERROR_WB
IF (visual:=GetVisualInfoA(scr,NIL))=NIL THEN RETURN ERROR_VISUAL
tattr:=scr.font
ENDPROC
CHAR '$VER: NumConv v1.5 by MarK (30.3.2000), kuchinka@volny.cz',0
PROC closedownscreen()
IF visual THEN FreeVisualInfo(visual)
IF scr THEN UnlockPubScreen(NIL,scr)
IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
ENDPROC
PROC openwindow()
DEF g:PTR TO gadget
IF (g:=CreateContext({glist}))=NIL THEN RETURN ERROR_CONTEXT
IF (gsrc:=CreateGadgetA(CYCLE_KIND,g,
[4,4,85,21,NIL,tattr,G_SRC,$0,visual,0]:newgadget,
[GTCY_LABELS,['DEC','HEX','BIN','ASCII','FLOAT','OCTAL',0],
GTCY_ACTIVE,DECI,
TAG_END]))=NIL THEN RETURN ERROR_GADGET
IF (gdst:=CreateGadgetA(CYCLE_KIND,gsrc,
[4,28,85,21,NIL,tattr,G_DST,$0,visual,0]:newgadget,
[GTCY_LABELS,['DEC','HEX','BIN','ASCII','FLOAT','OCTAL',0],
GTCY_ACTIVE,HEX,
TAG_END]))=NIL THEN RETURN ERROR_GADGET
IF (gs:=CreateGadgetA(STRING_KIND,gdst,
[92,4,245,21,NIL,tattr,G_STR,$0,visual,0]:newgadget,
[GTST_MAXCHARS,34,
TAG_END]))=NIL THEN RETURN ERROR_GADGET
IF (gt:=CreateGadgetA(TEXT_KIND,gs,
[92,28,269,21,NIL,tattr,G_TXT,$0,visual,0]:newgadget,
[GTTX_BORDER,TRUE,
TAG_END]))=NIL THEN RETURN ERROR_GADGET
IF (gcb:=CreateGadgetA(BUTTON_KIND,gt,
[340,4,21,21,'CB',tattr,G_CB,$0,visual,0]:newgadget,NIL))=NIL THEN RETURN ERROR_GADGET
IF (wnd:=OpenWindowTagList(NIL,
[WA_LEFT,0,
WA_TOP,scr.barheight+1,
WA_INNERWIDTH,364,
WA_INNERHEIGHT,52,
WA_IDCMP,IDCMP_GADGETUP OR IDCMP_GADGETDOWN OR IDCMP_CLOSEWINDOW OR IDCMP_ACTIVEWINDOW OR IDCMP_CHANGEWINDOW OR IDCMP_MOUSEBUTTONS,
WA_FLAGS,WFLG_CLOSEGADGET OR WFLG_DEPTHGADGET OR WFLG_DRAGBAR OR WFLG_GIMMEZEROZERO OR WFLG_ACTIVATE OR WFLG_RMBTRAP,
WA_TITLE,'NumConv v1.5 by Martin Kuchinka',
WA_SCREENTITLE,'NoTek 2000',
WA_CUSTOMSCREEN,scr,
WA_AUTOADJUST,TRUE,
WA_GADGETS,glist,
TAG_END]))=NIL THEN RETURN ERROR_WINDOW
Gt_RefreshWindow(wnd,NIL)
ENDPROC
PROC closewindow()
IF wnd THEN CloseWindow(wnd)
IF glist THEN FreeGadgets(glist)
ENDPROC
PROC process(win:PTR TO window)
DEF type=0
ActivateGadget(gs,win,NIL)
REPEAT
type:=wait4message(win)
SELECT type
CASE IDCMP_CLOSEWINDOW; RETURN
CASE IDCMP_MOUSEBUTTONS
ActivateGadget(gs,win,NIL)
CASE IDCMP_GADGETUP
go:
Gt_GetGadgetAttrsA(gsrc,win,NIL,[GTCY_ACTIVE,{src},TAG_END])
Gt_GetGadgetAttrsA(gdst,win,NIL,[GTCY_ACTIVE,{dst},TAG_END])
Gt_GetGadgetAttrsA(gs,win,NIL,[GTST_STRING,{str},TAG_END])
IF id=G_CB
Gt_SetGadgetAttrsA(gs,win,NIL,[GTST_STRING,txt,TAG_END])
Gt_GetGadgetAttrsA(gs,win,NIL,[GTST_STRING,{str},TAG_END])
ENDIF
SELECT dst
CASE DECI
SELECT src
CASE DECI; StringF(txt,'\d',Val(str))
CASE HEX; StringF(txt,'$\s',str); num:=Val(txt); StringF(txt,'\d',num)
CASE BIN; StringF(txt,'\d',bin2num(str))
CASE ASCII;StringF(txt,'\d',ascii2num(str))
CASE REAL ;StringF(txt,'\d',RealVal(str))
CASE OCTAL;StringF(txt,'\d',readoct(str))
ENDSELECT
CASE HEX
SELECT src
CASE DECI; StringF(txt,'\h',Val(str))
CASE HEX; StringF(txt,'$\s',str); num:=Val(txt); StringF(txt,'\h',num)
CASE BIN; StringF(txt,'\h',bin2num(str))
CASE ASCII;StringF(txt,'\h',ascii2num(str))
CASE REAL ;StringF(txt,'\h',RealVal(str))
CASE OCTAL;StringF(txt,'\h',readoct(str))
ENDSELECT
CASE BIN
SELECT src
CASE DECI; num2bin(txt,Val(str))
CASE HEX; StringF(txt,'$\s',str); num2bin(txt,Val(txt))
CASE BIN; num2bin(txt,bin2num(str))
CASE ASCII;num2bin(txt,ascii2num(str))
CASE REAL ;num2bin(txt,RealVal(str))
CASE OCTAL;num2bin(txt,readoct(str))
ENDSELECT
CASE ASCII
SELECT src
CASE DECI; num2ascii(txt,Val(str))
CASE HEX; StringF(txt,'$\s',str); num2ascii(txt,Val(txt))
CASE BIN; num2ascii(txt,bin2num(str))
CASE ASCII;num2ascii(txt,ascii2num(str))
CASE REAL ;num2ascii(txt,RealVal(str))
CASE OCTAL;num2ascii(txt,readoct(str))
ENDSELECT
CASE REAL
SELECT src
CASE DECI; RealF(txt,Val(str),6)
CASE HEX; StringF(txt,'$\s',str); RealF(txt,Val(txt),6)
CASE BIN; RealF(txt,bin2num(str),6)
CASE ASCII;RealF(txt,ascii2num(str),6)
CASE REAL ;RealF(txt,RealVal(str),6)
CASE OCTAL;RealF(txt,readoct(str),6)
ENDSELECT
CASE OCTAL
SELECT src
CASE DECI; writeoct(txt,Val(str))
CASE HEX; StringF(txt,'$\s',str); writeoct(txt,Val(txt))
CASE BIN; writeoct(txt,bin2num(str))
CASE ASCII;writeoct(txt,ascii2num(str))
CASE REAL ;writeoct(txt,RealVal(str))
CASE OCTAL;writeoct(txt,readoct(str))
ENDSELECT
ENDSELECT
IF error=FALSE THEN Gt_SetGadgetAttrsA(gt,win,NIL,[GTTX_TEXT,txt,TAG_END])
error:=FALSE
ActivateGadget(gs,win,NIL)
DEFAULT; JUMP go
ENDSELECT
UNTIL type=IDCMP_CLOSEWINDOW
ENDPROC
PROC wait4message(win:PTR TO window)
DEF mes:PTR TO intuimessage,type
REPEAT
type:=0
IF mes:=Gt_GetIMsg(win.userport)
type:=mes.class
IF type=IDCMP_GADGETUP
infos:=mes.iaddress
id:=infos.gadgetid
ENDIF
Gt_ReplyIMsg(mes)
ELSE
WaitPort(win.userport)
ENDIF
UNTIL type
ENDPROC type
PROC reporterr(er)
DEF erlist:PTR TO LONG
IF er
erlist:=['get context',
'create gadget',
'lock wb',
'get visual infos',
'open "gadtools.library" v37+',
'open window',
'create menus']
EasyRequestArgs(0,[20,0,0,'Could not \s!','OK'],0,[erlist[er-1]])
ENDIF
ENDPROC er
PROC main() HANDLE
detatch('NumConv')
IF reporterr(setupscreen())=0
reporterr(openwindow())
process(wnd)
closewindow()
IF CtrlC() THEN Raise(ERROR_NONE)
ENDIF
Raise(ERROR_NONE)
EXCEPT
closedownscreen()
ENDPROC
PROC bin2num(str:PTR TO CHAR)
DEF num=0,n=0
WHILE str[n]="0" DO n++
WHILE str[n]
IF str[n]="0"; num:=Shl(num,1)
ELSEIF str[n]="1"; num:=Shl(num,1) OR 1
ELSE
Gt_SetGadgetAttrsA(gt,wnd,NIL,[GTTX_TEXT,'Illegal Character',TAG_END])
error:=TRUE
ENDIF
n++
ENDWHILE
ENDPROC num
PROC ascii2num(str:PTR TO CHAR)
DEF num,s=0
num:=^str
IF (num AND $00ff0000)=0 THEN s:=3 ELSE IF (num AND $0000ff00)=0 THEN s:=2 ELSE IF (num AND $000000ff)=0 THEN s:=1
num:=Shr(num,s*8)
ENDPROC num
PROC num2bin(txt:PTR TO CHAR,num)
DEF n=31,i=0
WHILE n+1
txt[i]:=IF num AND Shl(1,n) THEN "1" ELSE "0"
n--
i++
ENDWHILE
txt[i]:=0
ENDPROC
PROC num2ascii(txt:PTR TO CHAR,num)
DEF n
IF num<=$ff; num:=Shl(num,24)
ELSEIF num<=$ffff; num:=Shl(num,16)
ELSEIF num<=$ffffff; num:=Shl(num,8)
ENDIF
^txt:=num
txt[4]:=0
FOR n:=0 TO 3
IF ((txt[n]>="\0") AND (txt[n]<" ")) OR ((txt[n]>=128) AND (txt[n]<160)) THEN txt[n]:="."
ENDFOR
ENDPROC
PROC readoct(txt:PTR TO CHAR)
DEF n=0,num=0
WHILE txt[n]
IF (txt[n]>="0") AND (txt[n]<="7")
num:=Shl(num,3)
num:=num OR (txt[n] AND $7)
ELSE
Gt_SetGadgetAttrsA(gt,wnd,NIL,[GTTX_TEXT,'Illegal Character',TAG_END])
error:=TRUE
ENDIF
n++
EXIT n=12
ENDWHILE
ENDPROC num
PROC writeoct(txt:PTR TO CHAR,num)
DEF n,m=0,i=0
FOR n:=0 TO 10
IF num AND Shl(7,n*3) THEN m:=n
ENDFOR
WHILE m+1
txt[i]:=(Shr(num,m*3) AND 7)+"0"
i++
m--
ENDWHILE
txt[i]:=0
ENDPROC num